This file explores the symptomatology of service members both before and after a traumatic brain injury. The tajectory of symptoms will be assessed while comparing demographic differences, particularly gender.
| gender | n |
|---|---|
| FEMALE | 30925 |
| MALE | 49502 |
| service_at_inj | n |
|---|---|
| USA | 58977 |
| USAF | 5770 |
| USCG | 558 |
| USMA | 243 |
| USMC | 9851 |
| USN | 4995 |
| USPH | 33 |
 Average Change in Symptoms per response interval.
means<-function(x){
round(mean(x,na.rm=TRUE),3)
}
subs_p<-function(df,y,p){
a<-df[,grep(y,names(df))]
a[]<-ifelse(a>=1,1,0)
a<-a%>%
summarise_all(funs(means))%>%
gather%>%
mutate(prop=value*100)%>%
filter(!grepl("_delta",key))
a$session<-ifelse(grepl("\\pre_",a$key),"Pre","Post")
a$key<-sub("pre_|pos_","",a$key)
a$key<-sub(p,"",a$key)
a$session<-factor(a$session,levels=c("Pre","Post"))
max=10*ceiling(max(a$prop)/10)
ggplot(a,aes(fill=session))+geom_bar(aes(reorder(x=key,-prop),y=prop,colour=session),stat="identity",position="dodge")+xlab("Symptoms")+ylab("Proportion of Patients")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-20,0,20,0)))+expand_limits(y=max)
}
subs_p(final_df,"\\_30","_30") +ggtitle("Proportional Comparisons of Symptoms 30 days Pre/Post Injury")subs_p_g<-function(df,y,p,m){
a<-df[,grep(y,names(df))]
a[]<-ifelse(a>=1,1,0)
a<-a%>%
summarise_all(funs(means))%>%
gather%>%
mutate(prop=value*100)%>%
filter(!grepl("_delta",key))
a$time<-ifelse(grepl("\\pre_",a$key),"Pre","Post")
a$key<-sub("pre_|pos_","",a$key)
a$key<-sub(p,"",a$key)
a$time<-factor(a$time,levels=c("Pre","Post"))
ggplot(a,aes(fill=time))+geom_bar(aes(reorder(x=key,-prop),y=prop,colour=time),stat="identity",position="dodge")+xlab("Symptoms")+ylab("Proportion of Patients")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-20,0,20,0)))
}
subs_a<-function(df,x){
x<-df[,grep(x,names(df))]
x<-x%>% summarise_all(funs(means))%>%
gather()
ggplot(x)+geom_bar(aes(reorder(x=key,-value),y=value),stat="identity",position = "dodge",fill="navyblue")+xlab("Symptoms")+ylab("Average Symptom")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-40,0,40,0)))
}
subs_a(final_df,"\\_30_delta")+ggtitle("Change in Symptoms at 30 Days Pre/Post Injury")subs_p(final_df,"\\_90","_90") +ggtitle("Proportional Comparisons of Symptoms 90 days Pre/Post Injury")subs_a(final_df,"\\_90_delta")+ggtitle("Change in Symptoms at 90 Days Pre/Post Injury")subs_p(final_df,"\\_180","_180") +ggtitle("Proportional Comparisons of Symptoms 180 days Pre/Post Injury")subs_a(final_df,"\\_180_delta")+ggtitle("Change in Symptoms at 180 Days Pre/Post Injury")subs_p(final_df,"\\_365","_365") +ggtitle("Proportional Comparisons of Symptoms 365 days Pre/Post Injury")subs_a(final_df,"\\_365_delta")+ggtitle("Change in Symptoms at 365 Dats Pre/Post Injury")sums<-function(x){
sum(x,na.rm=TRUE)}
tot<-final_df%>%
select(gender,pre_headache_30:vision_365_delta)%>%
group_by(gender)%>%
summarise_all(funs(sums))%>%
gather(survey,score,-gender)%>%
group_by(gender)%>%
summarise(Totals=sum(score))
kable(tot)| gender | Totals |
|---|---|
| FEMALE | 406930 |
| MALE | 772609 |
ave<-final_df%>%
select(gender,pre_headache_30:vision_365_delta)%>%
group_by(gender)%>%
summarise_all(funs(means))%>%
gather(survey,score,-gender)
ave<-dcast(ave,survey~gender)
#Average Number of Symptoms per Gender
datatable(ave%>%filter(!grepl("\\_delta",survey)),rownames=FALSE,caption='Average Numer of Symptoms per Gender') #Average Number of Symptoms Change per Gender
datatable(ave%>%filter(grepl("\\_delta",survey)),rownames=FALSE,caption='Average Change in Symptoms per Gender') prop<-final_df%>%
select(gender,pre_headache_30:vision_365_delta)%>%
group_by(gender)%>%
summarise_all(funs(sums))
prop_pre_post<-prop[,!grepl("\\_delta",names(prop))]
prop<-t(as.data.frame(prop_pre_post))
prop<-data.frame(names=row.names(prop),prop)
names<-prop[1,]
colnames(prop)<-as.character(unlist(prop[1,]))
prop<-prop[-1,]
prop$MALE<-as.numeric(prop$MALE)
prop$FEMALE<-as.numeric(prop$FEMALE)
prop<-prop%>%
mutate(FEMALE_Per=round(FEMALE/sum(FEMALE)*100,2),MALE_Per=round(MALE/sum(MALE)*100,2))
prop_pre<-prop%>%
filter(grepl("\\pre_",gender))%>%
mutate(FEMALE_Session_Per=round(FEMALE/sum(FEMALE)*100,2),MALE_Session_Per=round(MALE/sum(MALE)*100,2))
prop_pos<-prop%>%
filter(grepl("\\pos_",gender))%>%
mutate(FEMALE_Session_Per=round(FEMALE/sum(FEMALE)*100,2),MALE_Session_Per=round(MALE/sum(MALE)*100,2))
prop2<-rbind(prop_pre,prop_pos)
names(prop2)<-paste(c("Symptom","Female_Tot_Ct","Male_Tot_Ct","Female_All_Perc","Male_All_Perc","Female_Ses_Perc","Male_Ses_Perc"))
datatable(prop2,rownames = FALSE,caption='Total Counts and Percentiles of Symptoms per Gender')g<-as.data.frame(table(final_df$gender))
props<-merge(g,prop,by.x="Var1",by.y="gender",all=TRUE)
prop_fun<-function(x,y){
a<-x[,grep(y,names(x))]
p<<-lapply(a[,c(1:9)],function(x)prop.test(t(as.matrix(x,g$Freq))))
}
test<-lapply(prop_pre_post[,c(3:73)],function(x)prop.test(t(as.matrix(x,prop_pre_post$Freq)))$`p.value`)
#Running proportional tests on the frequencies of symptoms(appointments), males and females typically differed significantly at all time points symptoms. However, differences in stress were not significant before nor after date of injury. deltas<-final_df[,c(5,80:111)]
sub_box<-function(x,y){
x<-x%>%
gather(surveys,score,-gender)%>%
filter(gender==c("MALE","FEMALE"))%>%
filter(grepl(y,surveys))
x$surveys<-sub(y,"",x$surveys)
ggplot(x,aes(fill=gender))+geom_boxplot(aes(x=surveys,y=score))
}
#sub_box(deltas,"\\_30_delta")
test<-deltas%>%
gather(surveys,score,-gender)%>%
filter(gender==c("MALE","FEMALE"))%>%
filter(grepl("cognitive_30",surveys))
#ggplot(test,aes(fill=gender))+geom_histogram(aes(x=score))
subs_a<-function(df,x){
x<-df[,grep(x,names(df))]
x<-x%>% summarise_all(funs(means))%>%
gather()
ggplot(x)+geom_bar(aes(reorder(x=key,-value),y=value),stat="identity",position = "dodge",fill="navyblue")+xlab("Symptoms")+ylab("Average Symptom")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-40,0,40,0)))
}
pp<-final_df[,-c(1:4,6,7,80:111)]
pp<-pp%>%
gather(surveys,score,-gender)%>%
filter(gender==c("MALE","FEMALE"))%>%
separate(surveys,c("session","symptom","interval"),"_")%>%
mutate(interval=ifelse(session=="pre",as.numeric(interval)*-1,as.numeric(interval)))
pp_all<-pp%>%
group_by(gender,interval,symptom)%>%
summarise(mean=means(score))
ggplot(pp_all,aes(fill=gender))+geom_point(aes(x=interval,y=mean,colour=symptom,shape=gender),size=3)+geom_vline(xintercept=0,size=1)+geom_text(aes(-55,1,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+xlab("Days since Injury")+ylab("Average Number of Symptoms")+ggtitle("Changes in Average Symptoms per Gender")+theme(plot.title=element_text(hjust=0.5))pp_tot<-pp%>%
group_by(gender,interval,symptom)%>%
summarise(mean=sums(score))
#ggplot(pp_tot,aes(fill=gender))+geom_point(aes(x=interval,y=mean,colour=symptom,shape=gender),size=3)+geom_vline(xintercept=0,size=1)+geom_text(aes(-55,10000,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+xlab("Days since Injury")+ylab("Total Number of Symptoms")+ggtitle("Changes in Total Symptoms per Gender")+theme(plot.title=element_text(hjust=0.5))
pp_ave<-pp%>%
group_by(gender,interval)%>%
summarise(mean=means(score))
ggplot(pp_ave,aes(fill=gender))+geom_point(aes(x=interval,y=mean,colour=gender),size=3)+geom_vline(xintercept=0,size=1)+geom_text(aes(-55,0.41,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+xlab("Days since Injury")+ylab("Average Number of Symptoms")+ggtitle("Overall Changes in Average Symptoms per Gender")+theme(plot.title=element_text(hjust=0.5))Â Anaysis of Gender Differences
d<-final_df[,c(1,5,80:111)]
d<-d%>%
gather(symptom,score,-gender,-patient_hsdw_nk)%>%
separate(symptom,c("symptom","session","interval"),"_")%>%
select(-interval)
d$score<-as.numeric(d$score)
d<-d%>%
filter(symptom=="cognitive")
#hist(d$score)
#m1<-lmer(score~gender*session +(1|patient_hsdw_nk),data=d)
#summary(m1)d<-final_df[,c(1,5,8:79)]
d<-d%>%
gather(symptom,score,-gender,-patient_hsdw_nk)%>%
separate(symptom,c("session","symptom","interval"),"_")%>%
filter(session=="pos")
d$score<-as.numeric(d$score)
#mp1<-glmer(score~gender*interval+(1|patient_hsdw_nk),family=poisson,data=d)means<-function(x){
round(mean(x,na.rm=TRUE),3)
}
gd<-final_df[,c(5,8:79)]
gd<-gd%>%
gather(symptom,score,-gender)%>%
separate(symptom,c("session","symptom","interval"),"_")
gd$score<-ifelse(gd$score>=1,1,0)
gd$symptom<-gsub("^(\\w)(\\w+)", "\\U\\1\\L\\2",gd$symptom, perl = TRUE)
gd$session<-ifelse(gd$session=="pos","Post","Pre")
sub_symp<-function(symp,int){
df<-gd
a<-df%>%
filter(symptom==symp)%>%
filter(interval==int)%>%
group_by(gender,session,interval)%>%
summarise(prop=means(score))%>%
mutate(prop=prop*100)
a$session<-factor(a$session,levels=c("Pre","Post"))
title<-paste("Proportion of Patients with",symp, "at",int,"Days",sep=" ")
max=10*ceiling(max(a$prop)/10)
ggplot(a,aes(fill=session))+geom_bar(aes(x=gender,y=prop,colour=session),stat='identity',position='dodge')+theme(plot.title=element_text(hjust=0.5,vjust=1))+ggtitle(title)+xlab("Gender")+
ylab("Proportion of Patients")+scale_y_continuous(expand=c(0,0),breaks=scales::pretty_breaks())+expand_limits(y=max+10)
}
symps<-list("Depression","Anxiety","Vision","Ptsd","Cognitive","Headache","Neurologic","Sleep","Stress")
inter<-list(30,90,180,365)
lapply(inter,function(x)sub_symp("Depression",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(inter,function(x)sub_symp("Anxiety",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(inter,function(x)sub_symp("Cognitive",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(inter,function(x)sub_symp("Headache",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(inter,function(x)sub_symp("Neurologic",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(inter,function(x)sub_symp("Ptsd",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(inter,function(x)sub_symp("Sleep",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
sub_st<-function(symp,int){
df<-gd
a<-df%>%
filter(symptom==symp)%>%
filter(interval==int)%>%
group_by(gender,session,interval)%>%
summarise(prop=means(score))%>%
mutate(prop=prop*100)
a$session<-factor(a$session,levels=c("Pre","Post"))
title<-paste("Proportion of Patients with",symp, "at",int,"Days",sep=" ")
max=round(max(a$prop),0)
names(a)[2]<-paste("Session")
ggplot(a,aes(fill=Session))+geom_bar(aes(x=gender,y=prop,colour=Session),stat='identity',position='dodge')+theme(plot.title=element_text(hjust=0.5,vjust=1))+ggtitle(title)+xlab("Gender")+
ylab("Proportion of Patients")+scale_y_continuous(expand=c(0,0),breaks = scales::pretty_breaks())+expand_limits(y=max+1)
}
lapply(inter,function(x)sub_st("Stress",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(inter,function(x)sub_symp("Vision",x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
subs_gender<-function(int,gen){
g<-gd%>%
filter(interval==int)%>%
filter(gender==gen)%>%
group_by(gender,session,symptom)%>%
summarise(mean=means(score)*100)
g$session<-factor(g$session,levels=c("Pre","Post"))
max=10*ceiling(max(g$mean)/10)
title<-paste("Proportion of Symptoms at", int,"Days - ",gen,sep=" ")
ggplot(g,aes(fill=session))+geom_bar(aes(reorder(x=symptom,-mean),y=mean,colour=session),stat="identity",position="dodge")+xlab("Symptoms")+ylab("Proportion of Patients")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-20,0,20,0)))+expand_limits(y=50)+ggtitle(title)
}
#subs_gender("30")
#mapply(subs_gender,int=c(30,90),gen=c("FEMALE","MALE"))
subs_gen<-function(int){
g<-gd%>%
filter(interval==int)%>%
group_by(gender,session,symptom)%>%
summarise(mean=means(score)*100)
g$session<-factor(g$session,levels=c("Pre","Post"))
max=10*ceiling(max(g$mean)/10)
title<-paste("Proportion of Symptoms at", int,"Days",sep=" ")
ggplot(g,aes(fill=session))+geom_bar(aes(reorder(x=symptom,-mean),y=mean,colour=session),stat="identity",position="dodge")+xlab("Symptoms")+ylab("Proportion of Patients")+scale_y_continuous(expand = c(0, 0))+theme(plot.title=element_text(hjust=0.5,vjust=1),axis.text.x=element_text(size=8, angle=45,hjust=0.95,vjust=0.1,margin=margin(-20,0,20,0)))+expand_limits(y=50)+ggtitle(title)
}
lapply(c(30,90,180,365),function(x)subs_gen(x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(c(30,90,180,365),function(x)subs_gender(x,"MALE"))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
lapply(c(30,90,180,365),function(x)subs_gender(x,"FEMALE"))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
pp<-final_df[,-c(1:4,6,7,80:111)]
pp<-pp%>%
gather(surveys,score,-gender)%>%
filter(gender==c("MALE","FEMALE"))%>%
separate(surveys,c("session","symptom","interval"),"_")%>%
mutate(interval=ifelse(session=="pre",as.numeric(interval)*-1,as.numeric(interval)))%>%
mutate(Session=ifelse(session=="pre","Pre","Post"))
pp_all<-pp%>%
mutate(score=ifelse(score>=1,1,0))%>%
group_by(gender,interval,symptom)%>%
summarise(mean=means(score))%>%
mutate(mean=mean*100)
pp_all$symptom<-gsub("^(\\w)(\\w+)", "\\U\\1\\L\\2",pp_all$symptom, perl = TRUE)
traj<-function(x){
df<-pp_all%>%
filter(symptom==x)
title<-paste("Proportion of Patients with",x, "per Gender",sep=" ")
max=10*ceiling(max(df$mean)/10)
names(df)[1]<-paste("Gender")
ggplot(df)+geom_point(aes(x=interval,y=mean,shape=Gender,colour=Gender),size=4)+geom_vline(xintercept=0,size=1)+geom_text(aes(-80,max-1,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+
xlab("Days since Injury")+ylab("Proportion of Patients")+ggtitle(title)+theme(plot.title=element_text(hjust=0.5))+scale_y_continuous(expand=c(0,0),breaks=scales::pretty_breaks())+expand_limits(y=c(0,max))
}
lapply(symps[-9],function(x)traj(x))## [[1]]
##
## [[2]]
##
## [[3]]
##
## [[4]]
##
## [[5]]
##
## [[6]]
##
## [[7]]
##
## [[8]]
traj_st<-function(x){
df<-pp_all%>%
filter(symptom==x)
title<-paste("Proportion of Patients with",x, "per Gender",sep=" ")
names(df)[1]<-paste("Gender")
max=1*ceiling(max(df$mean)/1)
names(df)[1]<-paste("Gender")
ggplot(df)+geom_point(aes(x=interval,y=mean,shape=Gender,colour=Gender),size=4)+geom_vline(xintercept=0,size=1)+geom_text(aes(-80,max-.15,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+
xlab("Days since Injury")+ylab("Proportion of Patients")+ggtitle(title)+theme(plot.title=element_text(hjust=0.5))+scale_y_continuous(expand=c(0,0),breaks=scales::pretty_breaks())+expand_limits(y=c(0,max))
}
traj_st("Stress")m<-round(max(pp_all$mean))
ggplot(pp_all,aes(fill=gender))+geom_point(aes(x=interval,y=mean,colour=symptom,shape=gender),size=4)+geom_vline(xintercept=0,size=1)+geom_text(aes(-60,55,label="Date of Injury"))+scale_x_continuous(breaks=c(-365,-180,-90,-30,30,90,180,365))+xlab("Days since Injury")+ylab("Proportion of Patients")+ggtitle("Changes in the Proportion of Patient Symptoms per Gender")+theme(plot.title=element_text(hjust=0.5))+expand_limits(y=m)